home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / bigredthing.s < prev    next >
Text File  |  1997-11-28  |  15KB  |  913 lines

  1. ItsABigRedThing:
  2.  
  3.  move.w #63*256+63,14(a0)
  4.  move.w #$fefe,6(a0)
  5.  
  6.  move.w 12(a0),GraphicRoom(a0)
  7.  move.b worry(a0),d0
  8.  move.b d0,d1
  9.  and.w #128,d1
  10.  and.b #127,d0
  11.  beq.s .noless
  12.  sub.b #1,d0
  13. .noless:
  14.  add.b d0,d1
  15.  move.b d1,worry(a0)
  16.  
  17.  move.w (a0),CollId
  18.  move.w #160,extlen
  19.  move.b #2,awayfromwall
  20.  
  21.  move.l #40*256,StepUpVal
  22.  move.l #40*256,StepDownVal
  23.  move.l #456*128,thingheight
  24.  move.l #4,deadframe
  25.  move.w #27,screamsound
  26.  move.w #128,nasheight
  27.  clr.b gotgun
  28.  move.w 12(a0),d2
  29.  bge.s .stillalive
  30. .notthisone:
  31.  rts
  32. .stillalive:
  33.  
  34.  tst.b numlives(a0)
  35.  bgt.s .notdying
  36.  move.b #0,numlives(a0)
  37.  move.l ZoneAdds,a1
  38.  move.l (a1,d2.w*4),a1
  39.  add.l LEVELDATA,a1
  40.  move.l 2(a1),d0
  41.  asr.l #7,d0
  42.  sub.w nasheight,d0
  43.  move.w d0,4(a0)
  44.  
  45.  move.w 10(a0),d0
  46.  cmp.w #9,d0
  47.  bge .onfloordead
  48.  add.w #1,10(a0)
  49.  bra .notthisone
  50.  
  51. .onfloordead:
  52.  
  53.  rts
  54.  
  55. .notdying: 
  56.  
  57.  tst.b 17(a0)
  58.  beq.s .cantseeplayer
  59.  tst.w ThirdTimer(a0)
  60.  ble BigRedThingAttack
  61.  move.w TempFrames,d0
  62.  sub.w d0,ThirdTimer(a0)
  63.  bge .waitandsee
  64.  move.w #0,ThirdTimer(a0)
  65.  bra .waitandsee
  66.  
  67. .cantseeplayer:
  68.  
  69.  jsr GetRand
  70.  lsr.w #4,d0
  71.  and.w #63,d0
  72.  add.w #20,d0
  73.  move.w d0,ThirdTimer(a0)
  74.  
  75. .waitandsee:
  76.  
  77.  move.w #70,FourthTimer(a0)
  78.  
  79.  move.w 12(a0),d2
  80.  move.l ZoneAdds,a5
  81.  move.l (a5,d2.w*4),d0
  82.  add.l LEVELDATA,d0
  83.  move.l d0,objroom
  84.  
  85.  jsr ViewpointToDraw
  86.  
  87.  asl.l #2,d0
  88.  add.w alframe+2,d0
  89.  add.l #$000e0000,d0
  90.  move.l d0,8(a0)
  91.  
  92.  move.w 4(a0),d0
  93.  sub.w #200,d0
  94.  ext.l d0
  95.  asl.l #7,d0
  96.  move.l d0,newy
  97.  move.l d0,oldy
  98.  
  99.  move.w 12(a0),FromZone
  100.  jsr CheckTeleport
  101.  tst.b OKTEL
  102.  beq.s .notel
  103.  move.l floortemp,d0
  104.  asr.l #7,d0
  105.  add.w d0,4(a0)
  106.  bra .nochangedir
  107. .notel:
  108.  
  109.  move.w maxspd(a0),d2
  110.  muls TempFrames,d2
  111.  move.w d2,speed
  112.  move.w Facing(a0),d0
  113.  move.b ObjInTop(a0),StoodInTop
  114.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  115.  jsr GoInDirection
  116.  move.w #%1000000000,wallflags
  117.  
  118.  move.w #%110111100001,CollideFlags
  119.  jsr Collision
  120.  tst.b hitwall
  121.  beq.s .canmove
  122.  
  123.  move.w oldx,newx
  124.  move.w oldz,newz
  125.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  126.  bra .hitathing
  127.  
  128. .canmove:
  129.  
  130.  clr.b wallbounce
  131.  jsr MoveObject
  132.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  133.  move.b StoodInTop,ObjInTop(a0)
  134.  
  135. .hitathing:
  136.  
  137.  tst.b hitwall
  138.  beq.s .nochangedir
  139.  move.w #-1,ObjTimer(a0)
  140. .nochangedir
  141.  
  142.  move.l objroom,a2
  143.  move.w (a2),12(a0)
  144.  move.w newx,(a1)
  145.  move.w newz,4(a1)
  146.  
  147.  move.w (a2),d0
  148.  move.l #ZoneBrightTable,a5
  149.  move.l (a5,d0.w*4),d0
  150.  tst.b ObjInTop(a0)
  151.  bne.s .okbit
  152.  swap d0
  153. .okbit:
  154.  move.w d0,2(a0)
  155.  
  156.  move.l ToZoneFloor(a2),d0
  157.  tst.b ObjInTop(a0)
  158.  beq.s .notintop
  159.  move.l ToUpperFloor(a2),d0
  160. .notintop:
  161.  asr.l #7,d0
  162.  sub.w #256,d0
  163.  move.w d0,4(a0)
  164.  
  165.  
  166.  move.b damagetaken(a0),d2
  167.  beq .noscream
  168.  asr.b #2,d2 
  169.  bne .notzero
  170.  move.b #1,d2
  171. .notzero:
  172.  
  173.  sub.b d2,numlives(a0)
  174.  bgt .notdeadyet
  175.  
  176. ; cmp.b #1,d2
  177. ; ble.s .noexplode
  178.  
  179.  movem.l d0-d7/a0-a6,-(a7)
  180.  sub.l ObjectPoints,a1
  181.  add.l #ObjRotated,a1
  182.  move.l (a1),Noisex
  183.  move.w #400,Noisevol
  184.  move.w #14,Samplenum
  185.  move.b #1,chanpick
  186.  clr.b notifplaying
  187.  st backbeat
  188.  move.b 1(a0),IDNUM
  189.  jsr MakeSomeNoise
  190.  movem.l (a7)+,d0-d7/a0-a6
  191.  
  192.  movem.l d0-d7/a0-a6,-(a7)
  193.  move.w #0,d0
  194.  move.w #7,d2
  195.  move.w #31,d3
  196.  jsr ExplodeIntoBits
  197.  movem.l (a7)+,d0-d7/a0-a6
  198.  
  199.  move.b #4,16(a0)
  200.  move.b #%1000,17(a0)
  201.  move.l #$50003,8(a0)
  202.  move.w #$2020,6(a0)
  203.  move.w #$1010,14(a0)
  204.  
  205.  
  206.  rts
  207.  
  208. .noexplode:
  209.  
  210.  movem.l d0-d7/a0-a6,-(a7)
  211.  sub.l ObjectPoints,a1
  212.  add.l #ObjRotated,a1
  213.  move.l (a1),Noisex
  214.  move.w #200,Noisevol
  215.  move.w screamsound,Samplenum
  216.  move.b #1,chanpick
  217.  clr.b notifplaying
  218.  st backbeat
  219.  move.b 1(a0),IDNUM
  220.  jsr MakeSomeNoise
  221.  movem.l (a7)+,d0-d7/a0-a6
  222.  move.l deadframe,8(a0)
  223.  rts
  224.  
  225. .notdeadyet:
  226.  clr.b damagetaken(a0)
  227.  movem.l d0-d7/a0-a6,-(a7)
  228.  sub.l ObjectPoints,a1
  229.  add.l #ObjRotated,a1
  230.  move.l (a1),Noisex
  231.  move.w #200,Noisevol
  232.  move.w screamsound,Samplenum
  233.  move.b #1,chanpick
  234.  clr.b notifplaying
  235.  move.b 1(a0),IDNUM
  236.  st backbeat
  237.  jsr MakeSomeNoise
  238.  movem.l (a7)+,d0-d7/a0-a6
  239.  
  240. .noscream
  241.  
  242.  
  243.  move.w TempFrames,d0
  244.  sub.w d0,ObjTimer(a0)
  245.  bge.s .keepsamedir
  246.  
  247.  jsr GetRand
  248.  and.w #8190,d0
  249.  move.w d0,Facing(a0)
  250.  move.w #150,ObjTimer(a0)
  251.  
  252. .keepsamedir:
  253.  
  254.  move.w TempFrames,d0
  255.  sub.w d0,SecTimer(a0)
  256.  bge.s .nohiss
  257.  
  258.  jsr GetRand
  259.  lsr.w #6,d0
  260.  and.w #1,d0
  261.  add.w #17,d0
  262.  movem.l d0-d7/a0-a6,-(a7)
  263.  sub.l ObjectPoints,a1
  264.  add.l #ObjRotated,a1
  265.  move.l (a1),Noisex
  266.  move.w #100,Noisevol
  267.  move.w d0,Samplenum
  268.  move.b #1,chanpick
  269.  clr.b notifplaying
  270.  move.b 1(a0),IDNUM
  271.  st backbeat
  272.  jsr MakeSomeNoise
  273.  movem.l (a7)+,d0-d7/a0-a6
  274.  
  275.  Jsr GetRand
  276.  lsr.w #6,d0
  277.  and.w #255,d0
  278.  add.w #300,d0
  279.  move.w d0,SecTimer(a0)
  280.  
  281. .nohiss:
  282.  
  283.  move.b ObjInTop(a0),ViewerTop
  284.  move.b PLR1_StoodInTop,TargetTop
  285.  move.l PLR1_Roompt,ToRoom
  286.  move.l objroom,FromRoom
  287.  move.w newx,Viewerx
  288.  move.w newz,Viewerz
  289.  move.w PLR1_xoff,Targetx
  290.  move.w PLR1_zoff,Targetz
  291.  move.l PLR1_yoff,d0
  292.  asr.l #7,d0
  293.  move.w d0,Targety
  294.  move.w 4(a0),Viewery
  295.  jsr CanItBeSeen
  296.  
  297.  clr.b 17(a0)
  298.  
  299.  tst.b CanSee
  300.  beq .carryonprowling
  301.  
  302.  move.b #1,17(a0)
  303.  
  304. .carryonprowling:
  305.  
  306.  move.b ObjInTop(a0),ViewerTop
  307.  move.b PLR2_StoodInTop,TargetTop
  308.  move.l PLR2_Roompt,ToRoom
  309.  move.l objroom,FromRoom
  310.  move.w newx,Viewerx
  311.  move.w newz,Viewerz
  312.  move.w PLR2_xoff,Targetx
  313.  move.w PLR2_zoff,Targetz
  314.  move.l PLR2_yoff,d0
  315.  asr.l #7,d0
  316.  move.w d0,Targety
  317.  move.w 4(a0),Viewery
  318.  jsr CanItBeSeen
  319.  
  320.  tst.b CanSee
  321.  beq .carryonprowling2
  322.  
  323.  or.b #2,17(a0)
  324.  
  325. .carryonprowling2:
  326.  
  327.  
  328.  rts
  329.  
  330. BigRedThingAttack:
  331.  
  332.  move.w 12(a0),d2
  333.  move.l ZoneAdds,a5
  334.  move.l (a5,d2.w*4),d0
  335.  add.l LEVELDATA,d0
  336.  move.l d0,objroom
  337.  
  338.  btst #0,17(a0)
  339.  beq BigRedThingAttackPLR2
  340.  btst #1,17(a0)
  341.  beq BigRedThingAttackPLR1
  342.  
  343.  move.l ObjectPoints,a1
  344.  move.w (a0),d0
  345.  move.w (a1,d0.w*8),d1
  346.  move.w 4(a1,d0.w*8),d2
  347.  
  348.  move.w PLR1_xoff,d3
  349.  move.w PLR1_zoff,d4
  350.  sub.w d1,d3
  351.  sub.w d2,d4
  352.  muls d3,d3
  353.  muls d4,d4
  354.  add.l d4,d3
  355.  move.w PLR2_xoff,d4
  356.  move.w PLR2_zoff,d5
  357.  sub.w d1,d4
  358.  sub.w d2,d5
  359.  muls d4,d4
  360.  muls d5,d5
  361.  add.l d5,d4
  362.  cmp.l d3,d4
  363.  ble BigRedThingAttackPLR2
  364.  
  365.  
  366. BigRedThingAttackPLR1:
  367.  
  368.  
  369.  move.w TempFrames,d0
  370.  sub.w d0,FourthTimer(a0)
  371.  bgt.s .oktoshoot
  372.  move.w #50,ThirdTimer(a0)
  373. .oktoshoot:
  374.  
  375.  move.w 12(a0),d2
  376.  move.l ZoneAdds,a5
  377.  move.l (a5,d2.w*4),d0
  378.  add.l LEVELDATA,d0
  379.  move.l d0,objroom
  380.  
  381.  jsr ViewpointToDraw
  382.  
  383.  asl.l #2,d0
  384.  bne.s .notflfl
  385.  move.l #16,d0
  386. .notflfl:
  387.  
  388.  add.l #$e0000,d0
  389.  move.l d0,8(a0)
  390.  
  391.  move.w PLR1_xoff,newx
  392.  move.w PLR1_zoff,newz
  393.  move.w (a0),d1
  394.  move.l #ObjRotated,a6
  395.  move.l ObjectPoints,a1
  396.  lea (a1,d1.w*8),a1
  397.  lea (a6,d1.w*8),a6
  398.  move.w (a1),oldx
  399.  move.w 4(a1),oldz
  400.  move.w maxspd(a0),d2
  401.  muls.w TempFrames,d2
  402.  move.w d2,speed
  403.  move.w #80,Range
  404.  move.w 4(a0),d0
  405.  ext.l d0
  406.  asl.l #7,d0
  407.  sub.l #200*128,d0
  408.  move.l d0,newy
  409.  move.l d0,oldy
  410.  
  411.  move.b ObjInTop(a0),StoodInTop
  412.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  413.  clr.b canshove
  414.  clr.b GotThere
  415.  jsr HeadTowardsAng
  416.  move.w #%1000000000,wallflags
  417.  
  418.   
  419.  clr.b wallbounce
  420.  Jsr MoveObject
  421.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  422.  move.b StoodInTop,ObjInTop(a0)
  423.  
  424.  move.w AngRet,Facing(a0)
  425.  
  426.  move.l objroom,a2
  427.  move.w (a2),12(a0)
  428.  move.w oldx,(a1)
  429.  move.w oldz,4(a1)
  430.  
  431.  move.w (a2),d0
  432.  move.l #ZoneBrightTable,a5
  433.  move.l (a5,d0.w*4),d0
  434.  tst.b ObjInTop(a0)
  435.  bne.s .okbit
  436.  swap d0
  437. .okbit:
  438.  move.w d0,2(a0)
  439.  
  440.  move.l ToZoneFloor(a2),d0
  441.  tst.b ObjInTop(a0)
  442.  beq.s .notintop
  443.  move.l ToUpperFloor(a2),d0
  444. .notintop:
  445.  asr.l #7,d0
  446.  sub.w #256,d0
  447.  move.w d0,4(a0)
  448.  
  449.  move.b damagetaken(a0),d2
  450.  beq .noscream
  451.  asr.b #2,d2 
  452.  bne .notzero
  453.  move.b #1,d2
  454. .notzero:
  455.  
  456.  sub.b d2,numlives(a0)
  457.  bgt .notdeadyet
  458.  
  459. ; cmp.b #1,d2
  460. ; ble.s .noexplode
  461.  
  462.  movem.l d0-d7/a0-a6,-(a7)
  463.  sub.l ObjectPoints,a1
  464.  add.l #ObjRotated,a1
  465.  move.l (a1),Noisex
  466.  move.w #400,Noisevol
  467.  move.w #14,Samplenum
  468.  move.b #1,chanpick
  469.  clr.b notifplaying
  470.  st backbeat
  471.  move.b 1(a0),IDNUM
  472.  jsr MakeSomeNoise
  473.  movem.l (a7)+,d0-d7/a0-a6
  474.  
  475.  movem.l d0-d7/a0-a6,-(a7)
  476.  move.w #0,d0
  477.  move.w #9,d2
  478.  move.w #31,d3
  479.  jsr ExplodeIntoBits
  480.  movem.l (a7)+,d0-d7/a0-a6
  481.  
  482.  move.b #4,16(a0)
  483.  move.b #%1000,17(a0)
  484.  move.l #$50003,8(a0)
  485.  move.w #$2020,6(a0)
  486.  move.w #$1010,14(a0)
  487.  
  488.  
  489.  rts
  490.  
  491. .noexplode:
  492.  
  493.  movem.l d0-d7/a0-a6,-(a7)
  494.  sub.l ObjectPoints,a1
  495.  add.l #ObjRotated,a1
  496.  move.l (a1),Noisex
  497.  move.w #200,Noisevol
  498.  move.w screamsound,Samplenum
  499.  move.b #1,chanpick
  500.  clr.b notifplaying
  501.  st backbeat
  502.  move.b 1(a0),IDNUM
  503.  jsr MakeSomeNoise
  504.  movem.l (a7)+,d0-d7/a0-a6
  505.  move.l deadframe,8(a0)
  506.  rts
  507.  
  508. .notdeadyet:
  509.  clr.b damagetaken(a0)
  510.  movem.l d0-d7/a0-a6,-(a7)
  511.  sub.l ObjectPoints,a1
  512.  add.l #ObjRotated,a1
  513.  move.l (a1),Noisex
  514.  move.w #200,Noisevol
  515.  move.w screamsound,Samplenum
  516.  move.b #1,chanpick
  517.  clr.b notifplaying
  518.  move.b 1(a0),IDNUM
  519.  st backbeat
  520.  jsr MakeSomeNoise
  521.  movem.l (a7)+,d0-d7/a0-a6
  522.  
  523. .noscream
  524.  
  525. ; tst.b canshootgun
  526. ; beq .cantshoot
  527.  cmp.w #20,FourthTimer(a0)
  528.  bge .cantshoot
  529.  
  530.  move.w #30,FourthTimer(a0)
  531.  
  532.  move.w ThirdTimer(a0),d0
  533.  sub.w #1,d0
  534.  cmp.w #-1,d0
  535.  bge.s .noreset
  536.  
  537.  jsr GetRand
  538.  and.w #127,d0
  539.  add.w #100,d0
  540.  
  541. .noreset:
  542.  move.w d0,ThirdTimer(a0)
  543.  
  544.  
  545.  move.l #$e0011,8(a0)
  546.  
  547.  move.w #9,Samplenum
  548.  move.b #2,SHOTTYPE
  549.  move.b #10,SHOTPOWER
  550.  move.w #32,SHOTSPEED
  551.  move.w #4,SHOTSHIFT
  552.  move.w #-700,SHOTOFFMULT
  553.  move.l #-10*128,SHOTYOFF
  554.  move.w #-100,2(a0)
  555.  
  556.  jsr FireAtPlayer1
  557.  
  558. .cantshoot:
  559.  
  560.  
  561.  move.w TempFrames,d0
  562.  sub.w d0,SecTimer(a0)
  563.  bge.s .nohiss
  564.  
  565.  movem.l d0-d7/a0-a6,-(a7)
  566.  sub.l ObjectPoints,a1
  567.  add.l #ObjRotated,a1
  568.  move.l (a1),Noisex
  569.  move.w #100,Noisevol
  570.  move.w #16,Samplenum
  571.  move.b #1,chanpick
  572.  clr.b notifplaying
  573.  move.b 1(a0),IDNUM
  574.  st backbeat
  575.  jsr MakeSomeNoise
  576.  movem.l (a7)+,d0-d7/a0-a6
  577.  
  578.  Jsr GetRand
  579.  lsr.w #6,d0
  580.  and.w #255,d0
  581.  add.w #300,d0
  582.  move.w d0,SecTimer(a0)
  583.  
  584. .nohiss:
  585.  
  586.  move.b ObjInTop(a0),ViewerTop
  587.  move.b PLR1_StoodInTop,TargetTop
  588.  move.l PLR1_Roompt,ToRoom
  589.  move.l objroom,FromRoom
  590.  move.w newx,Viewerx
  591.  move.w newz,Viewerz
  592.  move.w PLR1_xoff,Targetx
  593.  move.w PLR1_zoff,Targetz
  594.  move.l PLR1_yoff,d0
  595.  asr.l #7,d0
  596.  move.w d0,Targety
  597.  move.w 4(a0),Viewery
  598.  jsr CanItBeSeen
  599.  
  600.  clr.b 17(a0)
  601.  tst.b CanSee
  602.  beq .carryonprowling
  603.  
  604.  move.b #1,17(a0)
  605.  
  606. .carryonprowling:
  607.  
  608.  cmp.b #'n',mors
  609.  beq.s .carryonprowling2
  610.  
  611.  
  612.  move.b ObjInTop(a0),ViewerTop
  613.  move.b PLR2_StoodInTop,TargetTop
  614.  move.l PLR2_Roompt,ToRoom
  615.  move.l objroom,FromRoom
  616.  move.w newx,Viewerx
  617.  move.w newz,Viewerz
  618.  move.w PLR2_xoff,Targetx
  619.  move.w PLR2_zoff,Targetz
  620.  move.l PLR2_yoff,d0
  621.  asr.l #7,d0
  622.  move.w d0,Targety
  623.  move.w 4(a0),Viewery
  624.  jsr CanItBeSeen
  625.  
  626.  tst.b CanSee
  627.  beq .carryonprowling2
  628.  
  629.  or.b #2,17(a0)
  630.  
  631. .carryonprowling2:
  632.  
  633.  
  634.  rts
  635.  
  636. *************************************************
  637.  
  638. BigRedThingAttackPLR2:
  639.  
  640.  
  641.  
  642.  move.w TempFrames,d0
  643.  sub.w d0,FourthTimer(a0)
  644.  bgt.s .oktoshoot
  645.  move.w #50,ThirdTimer(a0)
  646. .oktoshoot:
  647.  
  648.  move.w 12(a0),d2
  649.  move.l ZoneAdds,a5
  650.  move.l (a5,d2.w*4),d0
  651.  add.l LEVELDATA,d0
  652.  move.l d0,objroom
  653.  
  654.  jsr ViewpointToDraw
  655.  
  656.  asl.l #2,d0
  657.  bne.s .notflfl
  658.  move.l #16,d0
  659. .notflfl:
  660.  
  661.  add.l #$e0000,d0
  662.  move.l d0,8(a0)
  663.  
  664.  move.w PLR2_xoff,newx
  665.  move.w PLR2_zoff,newz
  666.  move.w (a0),d1
  667.  move.l #ObjRotated,a6
  668.  move.l ObjectPoints,a1
  669.  lea (a1,d1.w*8),a1
  670.  lea (a6,d1.w*8),a6
  671.  move.w (a1),oldx
  672.  move.w 4(a1),oldz
  673.  move.w maxspd(a0),d2
  674.  muls.w TempFrames,d2
  675.  move.w d2,speed
  676.  move.w #80,Range
  677.  move.w 4(a0),d0
  678.  ext.l d0
  679.  asl.l #7,d0
  680.  sub.l #200*128,d0
  681.  move.l d0,newy
  682.  move.l d0,oldy
  683.  
  684.  move.b ObjInTop(a0),StoodInTop
  685.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  686.  clr.b canshove
  687.  clr.b GotThere
  688.  jsr HeadTowardsAng
  689.  move.w #%1000000000,wallflags
  690.  
  691.   
  692.  clr.b wallbounce
  693.  Jsr MoveObject
  694.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  695.  move.b StoodInTop,ObjInTop(a0)
  696.  
  697.  move.w AngRet,Facing(a0)
  698.  
  699.  move.l objroom,a2
  700.  move.w (a2),12(a0)
  701.  move.w oldx,(a1)
  702.  move.w oldz,4(a1)
  703.  
  704.  move.w (a2),d0
  705.  move.l #ZoneBrightTable,a5
  706.  move.l (a5,d0.w*4),d0
  707.  tst.b ObjInTop(a0)
  708.  bne.s .okbit
  709.  swap d0
  710. .okbit:
  711.  move.w d0,2(a0)
  712.  
  713.  move.l ToZoneFloor(a2),d0
  714.  tst.b ObjInTop(a0)
  715.  beq.s .notintop
  716.  move.l ToUpperFloor(a2),d0
  717. .notintop:
  718.  asr.l #7,d0
  719.  sub.w #256,d0
  720.  move.w d0,4(a0)
  721.  
  722.  move.b damagetaken(a0),d2
  723.  beq .noscream
  724.  asr.b #2,d2 
  725.  bne .notzero
  726.  move.b #1,d2
  727. .notzero:
  728.  
  729.  sub.b d2,numlives(a0)
  730.  bgt .notdeadyet
  731.  
  732. ; cmp.b #1,d2
  733. ; ble.s .noexplode
  734.  
  735.  movem.l d0-d7/a0-a6,-(a7)
  736.  sub.l ObjectPoints,a1
  737.  add.l #ObjRotated,a1
  738.  move.l (a1),Noisex
  739.  move.w #400,Noisevol
  740.  move.w #14,Samplenum
  741.  move.b #1,chanpick
  742.  clr.b notifplaying
  743.  st backbeat
  744.  move.b 1(a0),IDNUM
  745.  jsr MakeSomeNoise
  746.  movem.l (a7)+,d0-d7/a0-a6
  747.  
  748.  movem.l d0-d7/a0-a6,-(a7)
  749.  move.w #0,d0
  750.  move.w #9,d2
  751.  move.w #31,d3
  752.  jsr ExplodeIntoBits
  753.  movem.l (a7)+,d0-d7/a0-a6
  754.  
  755.  move.b #4,16(a0)
  756.  move.b #%1000,17(a0)
  757.  move.l #$50003,8(a0)
  758.  move.w #$2020,6(a0)
  759.  move.w #$1010,14(a0)
  760.  
  761.  
  762.  rts
  763.  
  764. .noexplode:
  765.  
  766.  movem.l d0-d7/a0-a6,-(a7)
  767.  sub.l ObjectPoints,a1
  768.  add.l #ObjRotated,a1
  769.  move.l (a1),Noisex
  770.  move.w #200,Noisevol
  771.  move.w screamsound,Samplenum
  772.  move.b #1,chanpick
  773.  clr.b notifplaying
  774.  st backbeat
  775.  move.b 1(a0),IDNUM
  776.  jsr MakeSomeNoise
  777.  movem.l (a7)+,d0-d7/a0-a6
  778.  move.l deadframe,8(a0)
  779.  rts
  780.  
  781. .notdeadyet:
  782.  clr.b damagetaken(a0)
  783.  movem.l d0-d7/a0-a6,-(a7)
  784.  sub.l ObjectPoints,a1
  785.  add.l #ObjRotated,a1
  786.  move.l (a1),Noisex
  787.  move.w #200,Noisevol
  788.  move.w screamsound,Samplenum
  789.  move.b #1,chanpick
  790.  clr.b notifplaying
  791.  move.b 1(a0),IDNUM
  792.  st backbeat
  793.  jsr MakeSomeNoise
  794.  movem.l (a7)+,d0-d7/a0-a6
  795.  
  796. .noscream
  797.  
  798. ; tst.b canshootgun
  799. ; beq .cantshoot
  800.  cmp.w #20,FourthTimer(a0)
  801.  bge .cantshoot
  802.  
  803.  move.w #30,FourthTimer(a0)
  804.  
  805.  move.w ThirdTimer(a0),d0
  806.  sub.w #1,d0
  807.  cmp.w #-1,d0
  808.  bge.s .noreset
  809.  
  810.  jsr GetRand
  811.  and.w #127,d0
  812.  add.w #100,d0
  813.  
  814. .noreset:
  815.  move.w d0,ThirdTimer(a0)
  816.  
  817.  
  818.  move.l #$e0011,8(a0)
  819.  
  820.  move.w #9,Samplenum
  821.  move.b #2,SHOTTYPE
  822.  move.b #10,SHOTPOWER
  823.  move.w #32,SHOTSPEED
  824.  move.w #4,SHOTSHIFT
  825.  move.w #-700,SHOTOFFMULT
  826.  move.l #-10*128,SHOTYOFF
  827.  move.w #-100,2(a0)
  828.  
  829.  jsr FireAtPlayer2
  830.  
  831. .cantshoot:
  832.  
  833.  
  834.  move.w TempFrames,d0
  835.  sub.w d0,SecTimer(a0)
  836.  bge.s .nohiss
  837.  
  838.  movem.l d0-d7/a0-a6,-(a7)
  839.  sub.l ObjectPoints,a1
  840.  add.l #ObjRotated,a1
  841.  move.l (a1),Noisex
  842.  move.w #100,Noisevol
  843.  move.w #16,Samplenum
  844.  move.b #1,chanpick
  845.  clr.b notifplaying
  846.  move.b 1(a0),IDNUM
  847.  st backbeat
  848.  jsr MakeSomeNoise
  849.  movem.l (a7)+,d0-d7/a0-a6
  850.  
  851.  Jsr GetRand
  852.  lsr.w #6,d0
  853.  and.w #255,d0
  854.  add.w #300,d0
  855.  move.w d0,SecTimer(a0)
  856.  
  857. .nohiss:
  858.  
  859.  move.b ObjInTop(a0),ViewerTop
  860.  move.b PLR1_StoodInTop,TargetTop
  861.  move.l PLR1_Roompt,ToRoom
  862.  move.l objroom,FromRoom
  863.  move.w newx,Viewerx
  864.  move.w newz,Viewerz
  865.  move.w PLR1_xoff,Targetx
  866.  move.w PLR1_zoff,Targetz
  867.  move.l PLR1_yoff,d0
  868.  asr.l #7,d0
  869.  move.w d0,Targety
  870.  move.w 4(a0),Viewery
  871.  jsr CanItBeSeen
  872.  
  873.  clr.b 17(a0)
  874.  tst.b CanSee
  875.  beq .carryonprowling
  876.  
  877.  move.b #1,17(a0)
  878.  
  879. .carryonprowling:
  880.  
  881.  cmp.b #'n',mors
  882.  beq.s .carryonprowling2
  883.  
  884.  
  885.  move.b ObjInTop(a0),ViewerTop
  886.  move.b PLR2_StoodInTop,TargetTop
  887.  move.l PLR2_Roompt,ToRoom
  888.  move.l objroom,FromRoom
  889.  move.w newx,Viewerx
  890.  move.w newz,Viewerz
  891.  move.w PLR2_xoff,Targetx
  892.  move.w PLR2_zoff,Targetz
  893.  move.l PLR2_yoff,d0
  894.  asr.l #7,d0
  895.  move.w d0,Targety
  896.  move.w 4(a0),Viewery
  897.  jsr CanItBeSeen
  898.  
  899.  tst.b CanSee
  900.  beq .carryonprowling2
  901.  
  902.  or.b #2,17(a0)
  903.  
  904. .carryonprowling2:
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  rts
  911.  
  912.  
  913.